use std::path::Path;
use core::{Profiles, Workspace};
-use core::registry::PackageRegistry;
use util::{CargoResult, human, ChainError, Config};
use ops::{self, Context, BuildConfig, Kind, Unit};
return rm_rf(&target_dir);
}
- let mut registry = PackageRegistry::new(opts.config)?;
- let resolve = ops::resolve_ws(&mut registry, ws)?;
- let packages = ops::get_resolved_packages(&resolve, registry);
+ let (packages, resolve) = ops::resolve_ws(ws)?;
let profiles = ws.profiles();
let host_triple = opts.config.rustc()?.host.clone();
-use core::registry::PackageRegistry;
-use core::{PackageId, Resolve, PackageSet, Workspace};
+use core::{Resolve, PackageSet, Workspace};
use ops;
use util::CargoResult;
/// Executes `cargo fetch`.
pub fn fetch<'a>(ws: &Workspace<'a>) -> CargoResult<(Resolve, PackageSet<'a>)> {
- let mut registry = PackageRegistry::new(ws.config())?;
- let resolve = ops::resolve_ws(&mut registry, ws)?;
- let packages = get_resolved_packages(&resolve, registry);
+ let (packages, resolve) = ops::resolve_ws(ws)?;
for id in resolve.iter() {
packages.get(id)?;
}
Ok((resolve, packages))
}
-
-pub fn get_resolved_packages<'a>(resolve: &Resolve,
- registry: PackageRegistry<'a>)
- -> PackageSet<'a> {
- let ids: Vec<PackageId> = resolve.iter().cloned().collect();
- registry.get(&ids)
-}
pub use self::registry::{publish, registry_configuration, RegistryConfig};
pub use self::registry::{registry_login, search, http_proxy_exists, http_handle};
pub use self::registry::{modify_owners, yank, OwnersOptions, PublishOpts};
-pub use self::cargo_fetch::{fetch, get_resolved_packages};
+pub use self::cargo_fetch::fetch;
pub use self::cargo_pkgid::pkgid;
pub use self::resolve::{resolve_ws, resolve_dependencies, resolve_with_previous};
pub use self::cargo_output_metadata::{output_metadata, OutputMetadataOptions, ExportInfo};
use core::registry::PackageRegistry;
use core::resolver::{self, Resolve, Method};
use sources::PathSource;
-use util::{profile, human, CargoResult, ChainError};
use ops;
+use util::{profile, human, CargoResult, ChainError};
/// Resolve all dependencies for the specified `package` using the previous
/// lockfile as a guide if present.
///
/// This function will also write the result of resolution as a new
/// lockfile.
-pub fn resolve_ws(registry: &mut PackageRegistry, ws: &Workspace)
- -> CargoResult<Resolve> {
- let prev = ops::load_pkg_lockfile(ws)?;
- let resolve = resolve_with_previous(registry, ws,
- Method::Everything,
- prev.as_ref(), None, &[])?;
-
- // Avoid writing a lockfile if we are `cargo install`ing a non local package.
- if ws.current_opt().map(|pkg| pkg.package_id().source_id().is_path()).unwrap_or(true) {
- ops::write_pkg_lockfile(ws, &resolve)?;
- }
- Ok(resolve)
+pub fn resolve_ws<'a>(ws: &Workspace<'a>) -> CargoResult<(PackageSet<'a>, Resolve)> {
+ let mut registry = PackageRegistry::new(ws.config())?;
+ let resolve = resolve_with_registry(ws, &mut registry, true)?;
+ let packages = get_resolved_packages(&resolve, registry);
+ Ok((packages, resolve))
}
pub fn resolve_dependencies<'a>(ws: &Workspace<'a>,
let mut registry = PackageRegistry::new(ws.config())?;
+ let mut write_lockfile = true;
if let Some(source) = source {
if let Some(root_package) = ws.current_opt() {
+ // Avoid writing a lockfile if we are `cargo install`ing a non local package.
+ write_lockfile = false;
registry.add_preloaded(root_package.package_id().source_id(), source);
}
}
// First, resolve the root_package's *listed* dependencies, as well as
// downloading and updating all remotes and such.
- let resolve = resolve_ws(&mut registry, ws)?;
+ let resolve = resolve_with_registry(ws, &mut registry, write_lockfile)?;
// Second, resolve with precisely what we're doing. Filter out
// transitive dependencies if necessary, specify features, handle
}
}
- let packages = ops::get_resolved_packages(&resolved_with_overrides,
- registry);
+ let packages = get_resolved_packages(&resolved_with_overrides, registry);
Ok((packages, resolved_with_overrides))
}
+fn resolve_with_registry(ws: &Workspace, registry: &mut PackageRegistry, write_lockfile: bool)
+ -> CargoResult<Resolve> {
+ let prev = ops::load_pkg_lockfile(ws)?;
+ let resolve = resolve_with_previous(registry, ws,
+ Method::Everything,
+ prev.as_ref(), None, &[])?;
+
+ if write_lockfile {
+ ops::write_pkg_lockfile(ws, &resolve)?;
+ }
+ Ok(resolve)
+}
+
+
/// Resolve all dependencies for a package using an optional previous instance
/// of resolve to guide the resolution process.
///
}
Ok(())
}
+
+fn get_resolved_packages<'a>(resolve: &Resolve,
+ registry: PackageRegistry<'a>)
+ -> PackageSet<'a> {
+ let ids: Vec<PackageId> = resolve.iter().cloned().collect();
+ registry.get(&ids)
+}
+